<?php
namespace app\common\controller;

use think\Controller;

/**
 * 通用函数类 （列表记录 修改状态、删除、排序、时间段查询）
 * @author leiqianyong 2020-10-17 15:42 PM
 */
class Com extends Controller {

	/**
	 * 修改记录状态
	 * @param int $id 需要操作的记录id
	 * @param int $state 状态
	 * @param string $model
	 */
	public function state($model=false){
		$id = array_unique((array)input('id',0));
		$id = implode(',',$id) ;

		if(empty($id))$this->error('请选择要操作的数据!');
		$where[] =['id','in',$id];
		$data['state']=input('state');

        $model || $model=db(request()->controller());
        if(is_string($model))$model=db($model);
		$res=$model->where($where)->update($data);
		if($res===false)$this->error('操作失败！');
		$this->success('操作成功！');
	}


	/**
	 * 删除恢复记录（隐藏）
	 * @param int $id 需要操作的记录id
	 * @param string $model
     * @param int $del 状态  1-删除  0-恢复
	 */
	public function del($model=false,$del=1){
		$id = array_unique((array)input('id',0));
		$id = implode(',',$id);

		$del = $del ?1:0;
		if(empty($id))$this->error('请选择要操作的数据!');
        $where[]=['id','in',$id];
		$data['hide_flag']=$del;

        $model || $model=db(request()->controller());
        if(is_string($model))$model=db($model);
		$res=$model->where($where)->update($data);
		if($res===false)$this->error('操作失败！');
	    $this->success('操作成功！');
	}


	/**
	 * 真实删除记录
	 * @param int $id 需要操作的记录id
	 * @param string $model
	 */
	public function delete($model=false){
		$id = array_unique((array)input('id',0));
		$id = implode(',',$id) ;

		if(empty($id))$this->error('请选择要操作的数据!');
		$where[]=['id','in',$id];

        $model || $model=db(request()->controller());
        if(is_string($model))$model=db($model);
		$res = $model->where($where)->delete();
		if($res===false)$this->error('操作失败！');
	    $this->success('操作成功！');
	}


	/**
	 * 批量排序
	 * @param string $model
	 */
	public function sort($model=false){
		$sort = input('sort');
		if(empty($sort)) $this->error('请选择要操作的数据!');

		foreach($sort as $k=>$v){
			if(!is_numeric($v))continue;
			$sql_bat_sort   .= " WHEN {$k} THEN {$v}" ;
			$sql_ids .= ','.$k ;
		}

        $model || $model=db(request()->controller());
        if(is_string($model))$model=db($model);
		$sql = "UPDATE {$model->getTable()} SET sort= CASE id ".$sql_bat_sort." END WHERE id IN (".trim($sql_ids,', ').")" ;
		$model->execute($sql);
		$this->success('操作成功！');
	}


    /**
     * 时间查询条件组合
     * @author leiqianyong 2020-11-12 14:41:32
     * @param $map 查询条件数组
     * @param string $field 时间字段名称
     * @param false $day  是否是日期，日期加上86400
     * @return mixed 返回查询条件数组
     */
	function condtime($map,$field='time',$day=true){

        //开始时间
        $starttime = input('starttime');
        if($starttime)$map[]=[$field,'>',strtotime($starttime)];
        $this->assign('starttime',$starttime);

        //结束时间
        $endtime = input('endtime');
        $seconds = $day ? 86400 : 0;//偏移量
        if($endtime)$map[]=[$field,'<=',strtotime($endtime)+$seconds];
        $this->assign('endtime',$endtime);

        return $map;
	}


    /**
     * 数据修改新增方法
     *
     * @param $data        数据
     * @param $object      数据模型
     * @param bool $url    返回地址
     * @param bool $id     数据ID
     */
	function editDataMethod($data=false,$object=false,$url=false,$id=false){
	    //数据内容
        if(!$data)$data=request()->post();

	    //如果传递的是模型名，则需要进行实例化处理
        if(!$object)$object=db(request()->controller());
	    if(is_string($object))$object=db($object);

	    $id  = $id?$id:input('id');
	    $url = $url?$url:request()->action();

        //修改操作
        if($id){
            $res=$object->strict(false)->where(['id'=>$id])->update($data);
            if(false!==$res)return $this->success("修改成功",url($url));
            $this->error('修改失败');
        }

        //添加操作
        $id = $object->strict(false)->insertGetId($data);
        if($id) return $this->success("添加成功",url($url,'id='.$id),['cmd'=>1]);
        $this->error("添加失败");
    }




}
